/*
 * EdgeIDEvaluator.h
 *
 *  Created on: Jun 5, 2013
 *      Author: koldar
 */

/**rappresenta un arco dotato di una particolare valutazione. Questa struttura viene prevalentemente utilizzata
 * in swap.c, all'interno della generazione degli archi crossati per ordinare vari archi a seconda del costo temporale
 */


#ifndef EDGEIDEVALUATOR_H_
#define EDGEIDEVALUATOR_H_

#include "edgeID.h"
#include <stdio.h>

typedef struct EdgeIDEvaluator{
	/**indica l'edge valutato*/
	PedgeID edge;
	/**indica l'indice di valutazione di questo particolare edge*/
	int valutation;
} EdgeIDEvaluator;

typedef EdgeIDEvaluator* PedgeIDEvaluator;

/**inizializza una nuova struttura di tipo EdgeIDEvaluator
 *
 * \pre
 *  \li i<j
 *
 * \post
 *  \li campo edge inizilizzato in modo che sia uguale a quello (i;j)
 *  \li valutation impostato ad eval
 *  \li campo edge validato correttamente (i<j)
 *
 * @param i indica un estremo dell'arco
 * @param j indica un estremo dell'arco
 * @param eval indica la valutazione di questo arco
 * @return un riferimento ad un'istanza PedgeIDEvaluator
 */
PedgeIDEvaluator initEdgeIDEvaluator(int i,int j,int eval);

/**libera la memoria dalla presenza di obj
 *
 * \pre
 *  \li obj non NULL
 * \post
 *  \li eliminato l'istanza edge all'interno di obj
 *  \li obj eliminato dalla memoria
 *
 * @param obj l'oggetto da deallocare
 */
void freeEdgeIDEvaluator(PedgeIDEvaluator obj);

/**stampa l'oggetto
 *
 * \pre
 *  \li f non NULL
 *  \li obj non NULL
 *
 * \post
 *	\li in f e' stata scritta una rappresentazione di obj
 *
 * @param f il file su cui stampare
 * @param obj l'oggetto da stampare
 */
void printEdgeIDEvaluator(FILE* f,PedgeIDEvaluator obj);

#endif /* EDGEIDEVALUATOR_H_ */
